package com.itheima.admin.service.impl;


import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.itheima.admin.mapper.AdUserMapper;
import com.itheima.admin.pojo.AdUser;
import com.itheima.admin.service.AdUserService;
import com.itheima.common.exception.LeadNewsException;
import com.itheima.common.util.AppJwtUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.DigestUtils;
import org.springframework.util.StringUtils;

import java.util.HashMap;
import java.util.Map;

/**
 * <p>
 * 管理员用户信息表 服务实现类
 * </p>
 *
 * @author ljh
 * @since 2021-11-26
 */
@Service
public class AdUserServiceImpl extends ServiceImpl<AdUserMapper, AdUser> implements AdUserService {

    @Autowired
    private AdUserMapper adUserMapper;

    //[登录]

    //核心 ：  接收页面来的用户名 从数据库查询数据  判断 数据中的密码 和页面传递过来的密码 对比  成功 就可以了
    @Override
    public Map<String, Object> login(AdUser adUser) throws LeadNewsException {

        //1.获取页面传递过来的用户名
        String name = adUser.getName();
        String password = adUser.getPassword();
        //2.校验用户名不能为空 （密码不能Wie空）
        if(StringUtils.isEmpty(name) || StringUtils.isEmpty(password)){
            throw new LeadNewsException("兄弟用户名和密码不能为空");
        }
        //3.从数据库中获取 （根据用户名） 一行数据  判断  如果没有 返回
        QueryWrapper<AdUser> quweryWrapper = new QueryWrapper<>();
        quweryWrapper.eq("name",name);
        AdUser adUserFromDb = adUserMapper.selectOne(quweryWrapper);
        if(adUserFromDb==null){
            throw new LeadNewsException("用户名或者密码错误");
        }
        //4.0对比（获取页面传递过来的密码 明文 ---》通过获取到数据库中的盐值 ---》md5加密 --》得出密文）
        String passwordFromweb = DigestUtils.md5DigestAsHex((password+adUserFromDb.getSalt()).getBytes());
        //4.1 获取数据库中的密码  判断 页面来的密文  和数据库中密文是否一致 如果不一致 返回错误
        String passwordfromDb = adUserFromDb.getPassword();
        if(!passwordfromDb.equals(passwordFromweb)){
            throw new LeadNewsException("用户名或者密码错误");
        }

        //5. 生成令牌
        String token = AppJwtUtil.createToken(Long.valueOf(adUserFromDb.getId()));

        Map<String,Object> map = new HashMap<>();
        map.put("token",token);

        //看需求 todo
        map.put("userheadpic",adUserFromDb.getImage());

        map.put("nickname",adUserFromDb.getNickname());
        return map;
    }
}
